package com.runjian.rundo.iot.agent.common.session.manager;

import com.runjian.rundo.iot.agent.common.session.Session;

/**
 * 设备连接会话管理
 *
 * @author CaoQingHua
 */
public interface SessionManager<T extends Session> {

    /**
     * 将设备连接会话存入缓存
     *
     * @param id 会话Id
     * @param session 连接会话
     * @param gateways 网关
     */
    void put(String id, T session, String... gateways);

    /**
     * 添加网关会话
     * 
     * @param session 全话
     * @param gateways 网关id
     */
    void putGatewaySession(T session, String... gateways);

    /**
     * 根据会话Id获取设备连接会话
     *
     * @param id 会话Id
     * @return 连接会话
     */
    T get(String id);

    /**
     * 获取网关会话
     * 
     * @param gatewayId 网关 Id
     * @return 连接会话
     */
    T getGatewaySession(String gatewayId);

    /**
     * 移除session缓存
     *
     * @param id 会话Id
     * @return 已从缓存删除的会话
     */
    T remove(String id);

    /**
     * 移除session缓存
     *
     * @param gatewayId 网关Id
     * @return 已从缓存删除的会话
     */
    T removeGatewaySession(String gatewayId);

}
